/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package e.planner;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.*;
import org.jdom.xpath.XPath;
/**
 *
 * @author Mário
 */
public class TestexPath {
        private static String x;

    //Executa pesquisa XPath e devolve lista de resultado
    public static List pesquisaXPath(Document doc, String expXPath) {
        try {
            
            XPath exp = XPath.newInstance(expXPath);

            //devolve todos os nãos que respeitam a expressão XPath
            List resultado = exp.selectNodes(doc);
            return resultado;
            
        } catch (JDOMException ex) {
            Logger.getLogger(TestexPath.class.getName()).log(Level.SEVERE, null, ex);
            
        } catch (NoClassDefFoundError a) {
            System.out.println("Erro : Classe não definida -> " + a);
        }
        return null;
    }

//Funções para escrever resultado da pesquisa XPath no monitor
    
    //Escreve o conteúdo de um elemento devolvido pela expressão XPath
    public static String listaUmElemento(Element e) {
        //System.out.println("Element name: " + e.getName());
        return e.getText().trim();
      //  List as = e.getAttributes();
       // listaTodosAtributos(as);
       // List c = e.getChildren();
       // listaTodosElementos(c);
    }

    //Lista nodo Texto
    public static String listaUmTexto(Text t) {
        return t.getText().trim();
    }

    //Lista nodo Numerico
    public static String listaUmNum(Number t) {
       return t.toString();
    }

    //Escreve o conteúdo de todos os elementos devolvidos pela expressão XPath
    public static void listaTodosElementos(List listaE) {
        Iterator it = listaE.iterator();
        while (it.hasNext()) {
            Object x = it.next();
            if ((x.getClass().getName()).equals("org.jdom.Text")) {
                listaUmTexto((Text) x);
            } else {
                listaUmElemento((Element) x);
            }
        }

    }

    //Escreve o conteúdo de todos os atributos de um determinado elemento devolvido pela expressão XPath
    public static void listaTodosAtributos(List listaA) {
        Iterator it = listaA.iterator();
        while (it.hasNext()) {
            Attribute a = (Attribute) it.next();
            System.out.println(a.getName() + ": " + a.getValue().trim());
        }

    }


    //Escreve o conteúdo de um elemento devolvido pela expressão XPath
    public static void escreveUmElemento(Element e, BufferedWriter out) throws IOException {
        out.write("\n");
        out.write("<" + e.getName());

        List as = e.getAttributes();

        if (!as.isEmpty()) {
            escreveTodosAtributos(as, out);
            out.write(e.getText().trim() + ">");
        } else {
            out.write(">" + e.getText().trim());
        }
        //out.write("\n");

        List c = e.getChildren();
        escreveTodosElementos(c, out);
        out.write("</" + e.getName() + ">");

    }
    
    //Escreve nodo Texto
    public static void escreveUmTexto(Text t, BufferedWriter out) throws IOException {
        out.write(t.getText());
        out.write("\n");

    }

    //Escreve o conteúdo de todos os elemento devolvido pela expressão XPath
    public static BufferedWriter escreveTodosElementos(List listaE, BufferedWriter out) throws IOException {
        Iterator it = listaE.iterator();
        while (it.hasNext()) {
            Object x = it.next();
            if ((x.getClass().getName()).equals("org.jdom.Text")) {
                escreveUmTexto((Text) x, out);
            } else {
                escreveUmElemento((Element) x, out);
            }
            //out.write("\n");
        }
        return out;
    }

    //Escreve o conteúdo de todos os atributos de um determinado elemento devolvido pela expressão XPath
    public static void escreveTodosAtributos(List listaA, BufferedWriter out) throws IOException {
        Iterator it = listaA.iterator();
        while (it.hasNext()) {
            Attribute a = (Attribute) it.next();
            out.write(" " + a.getName() + " ='" + a.getValue().trim() + "'");
        }
        //  return out;
    }
}
